package ig.util;
import com.ig.presentacion.modelos.desembolso.calculos.PlanesAmortizacion;
import com.ig.presentacion.modelos.desembolso.calculos.interfaces.ICalendarios;
import java.sql.Date;

/**
 *
 * @author JORGE ANDRES CHUQUEN
 */
public class Utilfin {
    public static Double Efectiva_to_Nominal(Double ValTasa,String ExpresTasa,Date FechaInicial,Date FechaFinal){
        double dias1=0;
        double tasa = 0;
        if(ExpresTasa.substring(0,1).equals("D")){
            dias1 = 1;
        }
        else if(ExpresTasa.substring(0,1).equals("Q")){
            dias1 = 15;
        }
        else if(ExpresTasa.substring(0,1).equals("M")){
            dias1 = 30;
        }
        else if(ExpresTasa.substring(0,1).equals("B")){
            dias1 = 60;
        }
        else if(ExpresTasa.substring(0,1).equals("S")){
            dias1 = 180;
        }
        else if(ExpresTasa.substring(0,1).equals("A") || ExpresTasa.substring(0,1).equals("N")){
            dias1 = 360;
        }
        else if(ExpresTasa.substring(0,1).equals("V")){
            dias1 = 150;
        }
        else if(ExpresTasa.substring(0,1).equals("P")){
            PlanesAmortizacion plan= new PlanesAmortizacion(true);
            plan.setCalendario(ICalendarios.CALENDARIO_COMERCIAL);
            dias1 = plan.getPeriodo360Dias(FechaInicial.getTime(),FechaFinal.getTime());
            if (dias1 <= 0){
                return new Double(0);
            }
        }
        else{
            dias1 = 90;
        }

        tasa = Math.pow((1 + ValTasa.doubleValue()),(1/(360/dias1))) - 1;

        if(!(ExpresTasa.substring(1,2).equals("V") || ExpresTasa.equals("NA"))){
            tasa = tasa / (1 + tasa);
        }

        tasa = tasa * (360/dias1);

        return new Double(tasa);
    }

    public static Double Nominal_to_Efectiva(Double ValTasa,String ExpresTasa,Date FechaInicial,Date FechaFinal){
        double dias1=0, dias2=0;
        double tasa = 0;
        if(ExpresTasa.substring(0,1).equals("D")){
            dias1 = 1;
            dias2 = 1;
        }
        else if(ExpresTasa.substring(0,1).equals("Q")){
            dias1 = 15;
            dias2 = 15;
        }
        else if(ExpresTasa.substring(0,1).equals("M")){
            dias1 = 30;
            dias2 = 31;
        }
        else if(ExpresTasa.substring(0,1).equals("B")){
            dias1 = 60;
            dias2 = 62;
        }
        else if(ExpresTasa.substring(0,1).equals("S")){
            dias1 = 180;
            dias2 = 182;
        }
        else if(ExpresTasa.substring(0,1).equals("A") || ExpresTasa.substring(0,1).equals("N")){
            dias1 = 360;
            dias2 = 365;
        }
        else if(ExpresTasa.substring(0,1).equals("P")){
            PlanesAmortizacion plan= new PlanesAmortizacion(true);
            plan.setCalendario(ICalendarios.CALENDARIO_COMERCIAL);
            dias1 = plan.getPeriodo360Dias(FechaInicial.getTime(),FechaFinal.getTime());
            if (dias1 <= 0){
                return new Double(0);
            }
            dias2 = dias1;
        }
        else if(ExpresTasa.substring(0,1).equals("V")){
            dias1 = 150;
            dias2 = 151;
        }
        else{
            dias1 = 90;
            dias2 = 92;
        }

        tasa = ValTasa.doubleValue()/(360/dias1);
        if(!(ExpresTasa.substring(1,2).equals("V") || ExpresTasa.equals("NA"))){
           tasa = tasa / (1 - tasa);
        }
        tasa = Math.pow((1 + tasa),(360/dias1)) - 1;

        return new Double(tasa);
    }
}
